package com.hadoop.project.gen.maodaligendata;

import com.hadoop.project.config.AppConfig;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class GenConstant {

    // 你要生成的hbase表
    public static final String TableName = "TestBack";

    public static final String[] tabList          = {"游戏实况", "电子竞技", "攻略" , "手游" , "主机游戏", "独立游戏", "游戏评测", "搞笑集锦", "我的世界", "英雄联盟", "Vlog", "日常" , "开箱" , "测评" , "家居" , "装修" , "宠物" , "萌宠" , "旅行" , "探店" , "美食制作", "吃播" , "探店报告", "烘焙" , "家常菜", "菜谱" , "黑暗料理", "深夜食堂"  , "饮品"     , "厨艺教程" , "数码"     , "手机"      , "电脑"     , "软件"       , "硬件", "科技评测", "新品发布", "人工智能", "编程", "互联网", "翻唱", "原创音乐", "MV", "演奏", "乐器", "音乐推荐", "现场", "电音", "古典音乐", "说唱", "电影解说", "电视剧", "动漫", "新番", "影评", "预告片", "剪辑", "幕后花絮", "经典片段", "影视杂谈", "穿搭", "美妆", "护肤", "发型", "购物分享", "潮流", "服饰", "化妆教程", "好物推荐", "时尚资讯", "健身", "篮球", "足球", "跑步", "瑜伽", "户外运动", "极限运动", "赛事", "训练", "运动装备", "科普", "教程", "学习" , "公开课", "技能分享", "历史", "科学", "语言学习", "读书", "演讲" , "汽车评测", "新车" , "二手车", "驾驶技巧", "摩托车", "自驾游", "改装", "车展", "新能源车", "保养"   , "搞笑", "沙雕", "动画", "手绘", "手工", "DIY", "纪录片", "舞蹈", "街舞", "新闻", "财经", "投资", "萌娃", "星座", "心理学", "社会实验", "挑战", "开箱测评", "摄影", "航拍", "ASMR", "人文", "艺术", "设计", "创意广告", "明星", "娱乐资讯", "综艺", "访谈", "正能量"};
    public static final String[] provinces        = {"北京市" , "天津市" , "上海市", "重庆市", "河北省" , "山西省" , "辽宁省" , "吉林省" , "黑龙江省", "江苏省" , "浙江省" , "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "海南省", "四川省" , "贵州省", "云南省" , "陕西省", "甘肃省", "青海省", "台湾省" , "内蒙古自治区", "广西壮族自治区", "西藏自治区", "宁夏回族自治区", "新疆维吾尔自治区", "香港特别行政区", "澳门特别行政区"};
    public static final String[] nickNamePrefixes = {"星辰"  , "梦幻"  , "风行者", "夜影" , "火焰"  , "寒冰"  , "雷霆"  , "神秘"  , "剑客"  , "诗人"  , "飞龙"  , "凤凰" , "狼魂" , "虎啸" , "鹰击" , "鹿跃" , "鱼跃" , "花语" , "石语" , "云游" , "光影"  , "雾隐" , "雷鸣"  , "风语" , "海浪" , "山川" , "林深"  , "月影"    , "日辉"     , "星河"   , "火鸟"     , "冰龙"      , "电狐"     , "风狼"       , "夜猫", "晨星"  , "暮雪"  , "秋叶"  , "春花", "夏雨" , "冬寒", "沙暴"  , "石林", "水滴", "云雀", "天鹰"  , "地虎", "海狮", "山猿"  , "林鹿", "金光"  , "银月" , "铜铃", "铁剑", "木鱼", "水仙" , "火狐", "土牛"  , "风马"  , "雷鸟"  , "天空", "大地", "海洋", "森林", "沙漠"  , "河流", "山脉", "草原"  , "冰川"  , "火山"  , "剑魂", "枪影", "弓箭", "盾卫", "法师", "道士"  , "骑士"  , "战士", "猎人", "牧师"  , "诗人", "画家", "音乐家", "舞者" , "演员"  , "导演", "作家", "记者"  , "编辑", "摄影师", "程序员" , "设计师", "工程师", "教师"  , "学生" , "医生" , "护士", "律师", "警察"  , "消防员"};

    /**
     * 生成uid uid-3030411356 格式 uid-len位数字
     *
     * @return
     */
    public static final String genUid(Integer len) {
        Random random    = new Random();
        StringBuilder sb = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            sb.append(random.nextInt(10)); // 生成0-9之间的随机数字
        }
        return "uid-" + sb.toString();
    }


    /**
     * 生成user nickname 格式 nickname-昵称前缀+8位随机数字 例子 nickname-梦幻12398849
     *
     * @return
     */
    public static final String genNickName() {
        Random random = new Random();
        // 随机选择一个前缀
        String prefix = nickNamePrefixes[random.nextInt(nickNamePrefixes.length)];
        // 生成8位随机数字
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 8; i++) {
            sb.append(random.nextInt(10));
        }
        // 返回格式化的网名
        return "nickname-" + prefix + sb.toString();

    }

    /**
     * sex: 0 | 1
     *
     * @return
     */
    public static String genSex() {
        Random random = new Random();
        // nextInt(2) 会生成0或1的随机整数
        return String.valueOf(random.nextInt(2));
    }

    /**
     * age: 10~60
     *
     * @return
     */
    public static String genAge() {
        Random random = new Random();
        // nextInt(51) 会生成0到50的随机整数，然后加上10得到10到60的随机整数
        return String.valueOf(random.nextInt(51) + 10);
    }

    /**
     * 生成省份 例子：北京市
     *
     * @return
     */
    public static String genProvince() {
        Random random = new Random();
        // 生成一个0到provinces.length之间的随机索引
        int index = random.nextInt(provinces.length);
        return provinces[index];
    }


    /**
     * 生成视频ID，长度为10位，随机字母和数字组合，第一位不为数字 例子: xhOJbuzzqK
     *
     * @return 生成的视频ID
     */
    public static String genVid() {
        String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        String digits  = "0123456789";
        // 创建一个StringBuilder来构建视频ID
        StringBuilder vid = new StringBuilder(10);

        // 首位字符不能为数字，所以从字母中随机选择一个
        Random random = new Random();
        vid.append(letters.charAt(random.nextInt(letters.length())));

        // 剩余的9位可以是字母或数字
        String possibleChars = letters + digits;
        for (int i = 1; i < 10; i++) {
            vid.append(possibleChars.charAt(random.nextInt(possibleChars.length())));
        }

        return vid.toString();
    }

    /**
     * 生成 tabs 视频的标签 返回值为String 例子:'1,2,3'
     * tabs从tabList里随机挑选几个，不超过3个 最少一个。
     * tabList: [1,2,3,...]
     * 生成例子：
     * 98,43
     * 57,79
     * 88,43,11
     */
    public static String genTabs(List<String> tidList) {
        if (tidList == null || tidList.isEmpty()) {
            return "";
        }
        Random random = new Random();
        // 确定要选择的标签数量，1到3个
        int numberOfTabs = 1 + random.nextInt(3);
        // 确保不会选择超过列表大小的标签数量
        numberOfTabs = Math.min(numberOfTabs, tidList.size());

        // 复制列表以避免修改原始列表
        List<String> tempTabList = new ArrayList<>(tidList);
        // 打乱列表以随机选择
        Collections.shuffle(tempTabList);

        // 选择随机标签
        List<String> selectedTabs = tempTabList.subList(0, numberOfTabs);

        // 将选中的标签转换为以逗号分隔的字符串
        StringBuilder tabsStringBuilder = new StringBuilder();
        for (int i = 0; i < selectedTabs.size(); i++) {
            tabsStringBuilder.append(selectedTabs.get(i));
            if (i < selectedTabs.size() - 1) {
                tabsStringBuilder.append(",");
            }
        }
        return tabsStringBuilder.toString();
    }

    /**
     * 生成视频的作者 author 返回值为Long 例子：141234132
     * author从uidList里随机挑一个
     * uidList:[1324123434,141234132,1234123...]
     */
    public static String genAuthor(List<String> uidList) {
        if (uidList == null || uidList.isEmpty()) {
            return null; // 或者抛出异常，取决于你的需求
        }

        // 创建一个随机数生成器
        Random random = new Random();
        // 从列表中随机选择一个索引
        int index = random.nextInt(uidList.size());
        // 返回对应索引的元素
        return String.valueOf(uidList.get(index));
    }

    /**
     * 生成视频的秒数 最低10秒 最高300秒
     * 生成例子：30
     *
     * @return Long
     */
    public static String genFlip() {
        Random random = new Random();
        // 生成一个介于10到300之间的随机整数
        return String.valueOf(random.nextInt(291) + 10); // 确保包括300
    }

    public static String genVideoTime(int flip) {
        if (flip < 10 || flip > 300) {
            throw new IllegalArgumentException("The input value must be between 10 and 300 inclusive.");
        }

        Random random = new Random();
        // 生成一个0到flip-10之间的随机数，然后加上10
        int randomValue = random.nextInt(flip - 10 + 1) + 10;
        return String.valueOf(randomValue);
    }

    /**
     * 生成userLog里的vid
     * vid是vidList中的随机一个
     *
     * @param vidList
     * @return
     */
    public static String genVidInUserLog(List<String> vidList) {
        if (vidList == null || vidList.isEmpty()) {
            return null;
        }

        Random random = new Random();
        // 从列表中随机选择一个索引
        int index = random.nextInt(vidList.size());
        // 返回对应索引的元素
        return String.valueOf(vidList.get(index));
    }

    public static final String genLongTypeVID(Integer len) {
        Random random = new Random();
        StringBuilder sb = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            sb.append(random.nextInt(10)); // 生成0-9之间的随机数字
        }
        return sb.toString();
    }
}
